package com.kavin.design.factory.abstractFactory;

/**
 * @author kavin
 * @Description         
 * 1.抽象工厂（AbstractFactory）：核心部分，定义了具体工厂必须实现的接口或者必须继承的类。他可以是接口，也可以是抽象类。（CarFactory）
 * 2.具体工厂（ConcreteFactory）：提供方法给程序调用，返回产品实例。（LuxuryCarFactory）
 * 3.抽象产品（AbstractProduct）：工厂方法中所创建对象的父类或者接口，具体产品的父类。（Engine）
 * 4.具体产品（Product）：程序最终需要的东西，这里有各种我们需要的方法。（LuxuryEngine）
 * @create 2020/6/24
 **/
public class TestAbstractFactory {
    public static void main(String[] args) {
        //想要好车
        CarFactory factory = new LuxuryCarFactory();
        Engine engine = factory.createEngine();//创建高端发动机
        engine.run();
        engine.start();

        //想要差一点的车
        CarFactory factory2 = new LowCarFactory();
        Engine e2= factory2.createEngine();
        e2.run();
        e2.start();
        //以后想要中等车的话可以增加相应中等配件的接口
    }
}

